Permutation sequence¶
Time: O(N^2); Space: O(N); medium
The set [1,2,3,…,n] contains a total of n! unique permutations.
By listing and labeling ALL of the permutations in order, we get the following sequence (i.e., for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Example 1:
Input: n = 3, k = 3
Output: “213”
Example 2:
Input: n = 4, k = 9
Output: “2314”
Notes:
Given n will be between 1 and 9 inclusive.
Given k will be between 1 and n! inclusive.
1. Cantor ordering solution¶
[1]:
import math
class Solution1(object):
def getPermutation(self, n, k):
"""
:type n: int
:type k: int
:rtype: str
"""
seq, k, fact = "", k - 1, math.factorial(n - 1)
perm = [i for i in range(1, n + 1)]
for i in reversed(range(n)):
curr = perm[k // fact]
seq += str(curr)
perm.remove(curr)
if i > 0:
k %= fact
fact //= i
return seq
[3]:
s = Solution1()
n = 3
k = 3
assert s.getPermutation(n, k) == "213"
n = 4
k = 9
assert s.getPermutation(n, k) == "2314"